package task

import (
	"EasyCollect/global"
	"EasyCollect/sqls"
	"sync"
	"EasyCollect/pool"
)

/**
	执行任务的一个单元
 */
func RunTask(task *global.Task){

	srcDb:= sqls.NewDb(task,task.SrcUsername, task.SrcPassword,task.SrcIp,task.SrcPort,
			task.SrcDatabase,task.SrcCharacterEncoding,task.SrcMaxOpenConns,task.SrcMaxIdleConns)

	targetDb:= sqls.NewDb(task,task.TargetUsername, task.TargetPassword,task.TargetIp,task.TargetPort,
		task.TargetDatabase,task.TargetCharacterEncoding,task.TargetMaxOpenConns,task.TargetMaxIdleConns)

	var unitTask *UnitTask

	//未进行分片的任务
	if task.ShardingCount==0 {
		//构建执行任务的协程池
		p := pool.NewPool(task.Thread,100).Start().EnableWaitForAll(true)
		unitTask = &UnitTask{srcDb,targetDb,task,p,nil,false,new(sync.Mutex),false}
	}else{
		//进行了分片的任务
		workerPools := make(map[int]*pool.Pool)
		for index:=0; index< task.ShardingCount;index++{
			workerPools[index]=pool.NewPool(task.Thread/task.ShardingCount,100).Start().EnableWaitForAll(true)
		}
		unitTask = &UnitTask{srcDb,targetDb,task,nil,workerPools,false,new(sync.Mutex),false}
	}
	unitTask.describe()
	QueueManager.RegistTask(unitTask)

	if "" != task.Cron{
		registerTask(unitTask)
	}

}